package TestModelo;

import java.awt.Point;
import java.util.LinkedList;

import junit.framework.TestCase;
import modelo.*;

public class TestMapa extends TestCase {
	
	private Mapa mapa;
	
	@Override
	public void setUp(){
		mapa = new Mapa(5,5);
	}
	
	public void testCrearMapa(){		
		assertTrue(mapa.getFilas() == 5);
		assertTrue(mapa.getColumnas() == 5);
	}
	
	
	public void testMarcarComoSalida(){
		Point posicion = new Point(5,5);
		mapa.marcarSalida(posicion);
		assertTrue(mapa.obtenerCasillero(posicion).esSalida());
	}
	
	public void testEsPosicionValida(){
		assertTrue(!mapa.posicionValida(new Point(7,7)));
	}
	
	public void testQuitarContenidos(){
		Artefacto contenido = new Timer();
		Point posicion = new Point(3,3);
		Casillero casillero = mapa.obtenerCasillero(posicion);
		casillero.agregarContenido(contenido);
		mapa.quitarContenido(contenido);
		assertTrue(mapa.obtenerCasillero(posicion).estaVacio());
	}
	
	public void testObtenerCasillerosDelSubMapa(){
		LinkedList<Casillero> casilleros = mapa.obtenerCasillerosSubmapa(1,2,1,2);
		LinkedList<Point> posicionesAfectadas = new LinkedList<Point>();
		posicionesAfectadas.add(new Point(1,1));
		posicionesAfectadas.add(new Point(1,2));
		posicionesAfectadas.add(new Point(2,1));
		posicionesAfectadas.add(new Point(2,2));
		for (Casillero casillero : casilleros) {
			assertTrue(posicionesAfectadas.contains(casillero.getPosicion()));
			
		}
	}
	
	public void testCambiarPosicionContenido(){
		Point posicionInicial = new Point(3,3);
		Point posicionFinal = new Point(3,4);
		Contenido contenido = new BombaMolotov();
		contenido.setPosicion(posicionInicial);
		mapa.cambiarPosicionContenido(contenido,posicionFinal);
		assertEquals(contenido.getPosicion(),posicionFinal);
	}

}
